import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * return topK string
     * @param strings string字符串一维数组 strings
     * @param k int整型 the k
     * @return string字符串二维数组
     */



    public String[][] topKstrings (String[] strings, int k) {

        if(k==0||strings==null){
            return new String [0][0];
        }
        //建立二维数组保存答案
        String[][] ans=new String[k][2];
        Map<String,Integer> map=new HashMap<>();
        //统计每个单词出现的次数
        for(int i=0;i<strings.length;i++){
            String a=strings[i];
            map.put(a,map.getOrDefault(a,0)+1);
        }

        //将map放入list排序
        ArrayList<Map.Entry<String,Integer>> list=new ArrayList<>(map.entrySet());

        Collections.sort(list,(o1,o2)->
                ( (o1.getValue().compareTo(o2.getValue())==0)?
                        o1.getKey().compareTo(o2.getKey()):o2.getValue().compareTo(o1.getValue())
                ));

        for(int i=0;i<k;i++){
            ans[i][0]=list.get(i).getKey();
            ans[i][1]=String.valueOf(list.get(i).getValue());
        }
        return ans;

    }
}